Monitoring the performance of operating computer systems is a frequent and extremely important task performed by hardware and software engineers. Hardware engineers need performance data to determine how new computer hardware operates with existing operating systems and application programs. Specific designs of hardware structures, such as processor, memory and cache, can have drastically different, and sometimes unpredictable utilizations for the same set of programs. It is important that any flaws in the hardware be identified before the design is finalized. Performance data can identify how efficiently software uses hardware, and can be helpful in identifying potential hardware problems.
Software engineers need to identify critical portions of programs. For example, compiler writers would like to find out how the compiler schedules instructions for execution, or how well execution of conditional branches are predicted to provide input for software optimization.
It is a problem to accurately monitor the performance of hardware and software systems without disturbing the operating environment of the computer system. Known systems are typically hand crafted. Costly hardware and software modifications may need to be implemented to ensure that operations of the system are not affected by the monitoring systems.
There are a number of problems with traditional performance monitoring systems. Generally, the known systems are designed for specific hardware and software architectures. FIG. 1 shows a possible prior art arrangement of a computer system 100 to be monitored for performance. The system 100 includes a processor sub-system 110, a memory sub-system 120, and an input/output (I/O) sub-system 130 connected to each other by a communications bus 140. The processor sub-system 110 can include one or more central processing units (CPUs) 111-112. The CPUs can be of different designs, each executing instructions substantially in parallel. The memory sub-system 120 can include a main memory 121 and one or more caches 122 to accelerate data access. The I/O sub-system 130 can include I/O units 131-132 for supplying and persistently storing data.
In order to monitor system performance, the CPUs 111-112 include on-board performance monitoring logic PML-A 113 and PML-B 114. The I/O units 131-132 include performance monitoring logic PML-C 133 and PML-D 134. In addition, operating system software stored in the main memory 121 can include software maintained performance monitoring logic PML-E 123. In general, each of the performance monitoring logic 113-114, 133-134, and 123 includes one or more "counters" for counting "events" which are indicative of system performance. Events can be, for example, cache misses, instructions executed, I/O data transfer requests, and so forth.
Known hardware and software performance monitoring systems typically include performance monitoring routines specifically designed for particular performance logic designs. For example, the performance monitoring routines PMR-A 125 only operate in conjunction with PML-A 113. Likewise, PMR-B 126, PMR-C 127, PMR-A 128, and PMR-E 129, respectively, only work with PML-B 114, PML-C 133, PML-D 134, and PML-E 123. Each of the performance monitoring routines is typically associated with data buffers designed for collecting specific performance data of the associated routines.
Generally, the performance monitoring routines 125-129 are not easily extensible when the hardware and architecture are modified. Re-engineering performance systems takes time and consumes resources. Furthermore, the specific design characteristics of known monitoring routines typically inhibits their transportability to completely different components of the system. For example, the PMR-A 125 and PMR-B 126, designed for collecting performance data from processors, can generally not be used to collect I/O performance data generated by the I/O performance logic PML-C 133. Similarly, only the PMR-E 129 can collect performance data from the software maintained logic PML-E 123.
Moreover, known monitoring systems are designed to work with a specific operating system. Therefore, multiple versions of the monitoring systems are required in situations where a single processor can execute with different operating systems. Also, known monitoring systems tend to use data structures which are difficult to access by application programs. Direct access to the performance data by application software is generally precluded.
Therefore, there is a need for a system independent interface to performance monitoring systems. The interface should be independent of the hardware and software of the system. Additionally, the performance data collected should be easily accessible to application programs.